/**
 * @param {number[]} nums
 * @return {void} Do not return anything, modify nums in-place instead.
 * 思路：准备两指针，p0指向元素0，它左边的都是0，p2指向2，它右边都是2，然后循环数组，当循环到了p2，说明p2右边的元素都是正确的数，所以i<=p2
如果此时i指向元素2 i小于p2 则不断交换p2和i指向的元素 因为交换过来的数可能还是2，那这个2就处于不正确的位置了
如果此时i指向元素0 则交换p0和i指向的元素
循环完成则0和2都拍好了，中间的1自然也是正确的位置
 */
var sortColors = function (nums) {
    let l = 0
    let r = nums.length - 1
    for (let i = 0; i <= r; i++) {
        while (nums[i] === 2 && i < r) {
            swap(nums, i, r)
            r--
        }
        if (nums[i] === 0) {
            swap(nums, l, i)
            l++
        }

    }
};
const swap = (nums, l, r) => {
    const temp = nums[l]
    nums[l] = nums[r]
    nums[r] = temp
}